package com.example.study4;

/**
 * 学生类 - 实例代码块的使用
 */
/* 构造代码块
构造代码块：定义在类中的代码块(不加修饰符)。也叫：实例代码块。是用大括号 {} 包围的代码块。
构造代码块一般用于初始化实例成员变量。构造代码块在每次创建类的对象时都会执行，且优先于构造方法的执行。*/
public class Student1 {
    // 实例成员变量
    private String name;
    private int age;

    /**
     * 无参构造方法
     */
    public Student1() {
        System.out.println("无参构造方法执行!");
    }

    /**
     * 带参构造方法
     * @param name 学生姓名
     * @param age 学生年龄
     */
    public Student1(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("带参构造方法执行! name=" + name + ", age=" + age);
    }

    // 实例代码块/构造代码块 - 每次创建对象时都会执行
    {
        this.name = "liming";  // 为name设置默认值
        this.age = 18;         // 为age设置默认值
        System.out.println("实例代码块执行，设置默认值: name=" + name + ", age=" + age);
    }

    /**
     * 普通方法：显示学生信息
     */
    public void show() {
        System.out.println("学生信息 - 姓名: " + name + ", 年龄: " + age);
    }

    public static void main(String[] args) {
        System.out.println("创建第一个学生对象:");
        Student1 stu1 = new Student1();
        stu1.show();

        System.out.println("\n创建第二个学生对象:");
        Student1 stu2 = new Student1("李华", 20);
        stu2.show();
    }
}
/*
运行结果：
    创建第一个学生对象:
    实例代码块执行，设置默认值: name=liming, age=18
    无参构造方法执行!
    学生信息 - 姓名: liming, 年龄: 18

    创建第二个学生对象:
    实例代码块执行，设置默认值: name=liming, age=18
    带参构造方法执行! name=李华, age=20
    学生信息 - 姓名: 李华, 年龄: 20
*/